package mx.ipn.escom.redes.gestionardocumentos.dao;

import java.util.List;

import javax.inject.Named;
import javax.inject.Singleton;

import mx.ipn.escom.redes.equipo.model.AplicacionSoftware;
import mx.ipn.escom.redes.equipo.model.Documento;

import org.hibernate.Query;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

@Singleton
@Named("documentoDao")
public class DocumentoDao extends HibernateDaoSupport{
	
	private static final String UNICIDAD_NOMBRE = "FROM Documento where nombre = :name";

	public List<Documento> findAll(){
		return getHibernateTemplate().loadAll(Documento.class);
	}
	
	public Documento findById(Integer id){
		return getHibernateTemplate().get(Documento.class, id);
	}
	
	public List<Documento> findByExample(Documento entidad){
		return getHibernateTemplate().findByExample(entidad);
	}
	
	public Documento save(Documento entidad){
		Documento entidadAux = (Documento) getHibernateTemplate().merge(entidad);
		getHibernateTemplate().save(entidadAux);
		return entidadAux;
	}
	
	public Documento update(Documento entidad){
		Documento entidadAux = (Documento) getHibernateTemplate().merge(entidad);
		getHibernateTemplate().update(entidadAux);
		return entidadAux;
	}
	
	public Documento delete(Documento entidad){
		Documento entidadAux = (Documento) getHibernateTemplate().merge(entidad);
		getHibernateTemplate().refresh(entidadAux);
		getHibernateTemplate().delete(entidadAux);
		return entidadAux;
	}
	
	@SuppressWarnings("unchecked")
	@Transactional
	public boolean isNombreRepetido(String nombre){
		Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(UNICIDAD_NOMBRE);
		query.setString("name", nombre);
		List<AplicacionSoftware> list = query.list();
		if(list.isEmpty()){
			return true;
		}
		return false;
	}
}
